package mergetwosortedlists



type ListNode struct {
	Val  int
	Next *ListNode
}

func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
	var p, l *ListNode
	var p1, p2 *ListNode
	if l1==nil && l2==nil{
		return nil
	}

	if l1==nil{
		return l2
	}

	if l2==nil{
		return l1
	}

	if l1.Val<=l2.Val{
		l=l1
		p1=l1.Next
		p2=l2
	}else{
		l=l2
		p2=l2.Next
		p1=l1
	}

	p=l

	for {
		if p1==nil{
			p.Next=p2
			break
		}
		if p2==nil{
			p.Next=p1
			break
		}

		if p1.Val<=p2.Val{
			p.Next=p1
			p=p.Next
			p1=p1.Next
		}else{
			p.Next=p2
			p=p.Next
			p2=p2.Next
		}
	}

	return l
}
